using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: lunes_genera_rotacionBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla lunes_genera_rotacion, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 17/09/2011 1:30:37
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class lunes_genera_rotacionBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "lunes_genera_rotacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "lunes_genera_rotacion", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(lunes_genera_rotacion datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO lunes_genera_rotacion (id_sem_fk,fecha_lunes,estado_lunes) VALUES (?id_sem_fk,?fecha_lunes,?estado_lunes);";
				string strConectionUpdate = "UPDATE lunes_genera_rotacion SET id_sem_fk = ?id_sem_fk,fecha_lunes = ?fecha_lunes,estado_lunes = ?estado_lunes WHERE id_lunes=?id_lunes;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_lunes = new MySqlParameter("?id_lunes", MySqlDbType.Int32);
				MySqlParameter psqlId_sem_fk = new MySqlParameter("?id_sem_fk", MySqlDbType.Int32);
				MySqlParameter psqlFecha_lunes = new MySqlParameter("?fecha_lunes", MySqlDbType.Datetime);
				MySqlParameter psqlEstado_lunes = new MySqlParameter("?estado_lunes", MySqlDbType.VarChar,20);

				psqlId_lunes.Value = datos.Id_lunes;
				psqlId_sem_fk.Value = datos.Id_sem_fk;
				psqlFecha_lunes.Value = datos.Fecha_lunes;
				psqlEstado_lunes.Value = datos.Estado_lunes;

				if (!Existe("id_lunes=" + datos.Id_lunes))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_lunes
							, psqlId_sem_fk
							, psqlFecha_lunes
							, psqlEstado_lunes
							);
					MessageBox.Show("Se grabo [lunes_genera_rotacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_lunes
							, psqlId_sem_fk
							, psqlFecha_lunes
							, psqlEstado_lunes
							);
					MessageBox.Show("Se actualizó [lunes_genera_rotacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(lunes_genera_rotacion datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_lunes='{0}'", datos.Id_lunes);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("lunes_genera_rotacion"
						, new CampoValor("id_sem_fk", datos.Id_sem_fk.ToString())
						, new CampoValor("fecha_lunes",ValidarBuilder.FormatoFecha( datos.Fecha_lunes))
						, new CampoValor("estado_lunes", datos.Estado_lunes)
						);
                    //MessageBox.Show("Se grabo [lunes_genera_rotacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("lunes_genera_rotacion", filtro
						, new CampoValor("id_sem_fk", datos.Id_sem_fk.ToString())
						, new CampoValor("fecha_lunes",ValidarBuilder.FormatoFecha( datos.Fecha_lunes))
						, new CampoValor("estado_lunes", datos.Estado_lunes)
						);
                    //MessageBox.Show("Se actualizó [lunes_genera_rotacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

        public static void Actualiza_estado(string nuevo_estado)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                
                    bd.EjecutarUpdate("lunes_genera_rotacion"                        
                        , new CampoValor("estado_lunes", nuevo_estado)
                        );
                
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static lunes_genera_rotacion Recuperar(string filtro)
		{
			lunes_genera_rotacion r = new lunes_genera_rotacion();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_lunes = Convert.ToInt32(ds.Rows[0]["id_lunes"]);
					r.Id_sem_fk = Convert.ToInt32(ds.Rows[0]["id_sem_fk"]);
					if (ds.Rows[0]["fecha_lunes"] != System.DBNull.Value)
						r.Fecha_lunes = Convert.ToDateTime(ds.Rows[0]["fecha_lunes"]);
					if (ds.Rows[0]["fecha_lunes"] == System.DBNull.Value)
						r.Fecha_lunes = DateTime.Now;
					if (ds.Rows[0]["estado_lunes"] != System.DBNull.Value)
						r.Estado_lunes = ds.Rows[0]["estado_lunes"].ToString();
					if (ds.Rows[0]["estado_lunes"] == System.DBNull.Value)
						r.Estado_lunes = "";
					r.Semana_base = semana_baseBuilder.Recuperar("id_sem=" + ds.Rows[0]["id_sem_fk"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("lunes_genera_rotacion", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmblunes_genera_rotacion, string filtro, string nombre_display)
		{
			cmblunes_genera_rotacion.DataSource = ListarTodos(filtro);
			cmblunes_genera_rotacion.DisplayMember = nombre_display;
			cmblunes_genera_rotacion.ValueMember = "id_lunes";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_lunes AS id_lunes,id_sem_fk AS id_sem_fk,fecha_lunes AS fecha_lunes,estado_lunes AS estado_lunes", "lunes_genera_rotacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<lunes_genera_rotacion> ListarTodos_List(string filtro)
		{
			List<lunes_genera_rotacion> r = new List<lunes_genera_rotacion>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_lunes="+dt.Rows[i]["id_lunes"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Semana_base(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem";
				else
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "lunes_genera_rotacion, semana_base","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Semana_base_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "lunes_genera_rotacion.id_lunes AS lunes_genera_rotacion.id_lunes,lunes_genera_rotacion.id_sem_fk AS lunes_genera_rotacion.id_sem_fk,lunes_genera_rotacion.fecha_lunes AS lunes_genera_rotacion.fecha_lunes,lunes_genera_rotacion.estado_lunes AS lunes_genera_rotacion.estado_lunes," + 
							 "semana_base.id_sem AS semana_base.id_sem,semana_base.nro_matutina_sem AS semana_base.nro_matutina_sem,semana_base.nro_vespertina_sem AS semana_base.nro_vespertina_sem,semana_base.nro_nocturna AS semana_base.nro_nocturna,semana_base.nro_emp_sem AS semana_base.nro_emp_sem,semana_base.nro_dias_sem AS semana_base.nro_dias_sem,semana_base.estado_sem AS semana_base.estado_sem,semana_base.fecha_registro_sem AS semana_base.fecha_registro_sem,semana_base.fecha_inicio_sem AS semana_base.fecha_inicio_sem,semana_base.fecha_fin_sem AS semana_base.fecha_fin_sem";
			try
			{
				if(filtro=="")
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem";
				else
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "lunes_genera_rotacion, semana_base",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem ";
				else
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "semana_base,lunes_genera_rotacion","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "lunes_genera_rotacion.id_lunes AS lunes_genera_rotacion.id_lunes,lunes_genera_rotacion.id_sem_fk AS lunes_genera_rotacion.id_sem_fk,lunes_genera_rotacion.fecha_lunes AS lunes_genera_rotacion.fecha_lunes,lunes_genera_rotacion.estado_lunes AS lunes_genera_rotacion.estado_lunes," + 
							 "semana_base.id_sem AS semana_base.id_sem,semana_base.nro_matutina_sem AS semana_base.nro_matutina_sem,semana_base.nro_vespertina_sem AS semana_base.nro_vespertina_sem,semana_base.nro_nocturna AS semana_base.nro_nocturna,semana_base.nro_emp_sem AS semana_base.nro_emp_sem,semana_base.nro_dias_sem AS semana_base.nro_dias_sem,semana_base.estado_sem AS semana_base.estado_sem,semana_base.fecha_registro_sem AS semana_base.fecha_registro_sem,semana_base.fecha_inicio_sem AS semana_base.fecha_inicio_sem,semana_base.fecha_fin_sem AS semana_base.fecha_fin_sem";
			try
			{
				if(filtro=="")
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem ";
				else
					joins_ = "lunes_genera_rotacion.id_sem_fk = semana_base.id_sem AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "semana_base,lunes_genera_rotacion",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static lunes_genera_rotacion valida_campos_lunes_genera_rotacion(Control ctrl_id_lunes,Control ctrl_id_sem_fk,DateTime dpk_fecha_lunes,TextBox txt_estado_lunes)
		{
			bool r = true;
			lunes_genera_rotacion new_lunes_genera_rotacion = new lunes_genera_rotacion();
			try
			{
				if(ctrl_id_lunes.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_lunes = (TextBox)ctrl_id_lunes;
					if (txt_id_lunes.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_lunes","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_lunes.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_lunes","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_lunes_genera_rotacion.Id_lunes = Convert.ToInt32(txt_id_lunes.Text);
				}
				if(ctrl_id_lunes.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_lunes = (ComboBox)ctrl_id_lunes;
					if (cmb_id_lunes.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_lunes","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_lunes_genera_rotacion.Id_lunes = Convert.ToInt32(cmb_id_lunes.SelectedValue);
				}
				if(ctrl_id_sem_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_sem_fk = (TextBox)ctrl_id_sem_fk;
					if (txt_id_sem_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_sem_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_sem_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_sem_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_lunes_genera_rotacion.Id_sem_fk = Convert.ToInt32(txt_id_sem_fk.Text);
				}
				if(ctrl_id_sem_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_sem_fk = (ComboBox)ctrl_id_sem_fk;
					if (cmb_id_sem_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_sem_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_lunes_genera_rotacion.Id_sem_fk = Convert.ToInt32(cmb_id_sem_fk.SelectedValue);
				}
				if (r)
					new_lunes_genera_rotacion.Fecha_lunes = dpk_fecha_lunes;
				if (txt_estado_lunes.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la estado_lunes","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_lunes_genera_rotacion.Estado_lunes = txt_estado_lunes.Text;

				if(!r)
					new_lunes_genera_rotacion = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_lunes_genera_rotacion;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_lunes,Control ctrl_id_sem_fk,DateTime dpk_fecha_lunes,TextBox txt_estado_lunes)
		{
			try
			{
				lunes_genera_rotacion new_lunes_genera_rotacion =valida_campos_lunes_genera_rotacion(ctrl_id_lunes,ctrl_id_sem_fk,dpk_fecha_lunes,txt_estado_lunes); 
				if(new_lunes_genera_rotacion!=null)
					GrabarViaSql(new_lunes_genera_rotacion);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
